iT邦幫忙

2021 iThome 鐵人賽

DAY 15
1
Software Development

溫柔學姐的Kotlin補課/教學系列 第 15

程式進化論:一行表達式 Single-expression functions

  • 分享至 

  • xImage
  •  

「學姐,妳今天發生什麼事了嗎?」
「嗯⋯⋯」唯心沒有馬上回應詩憶的問題。

「是不是太累了?其實剩下的可以讀課堂講義的,真的,我現在就有在讀。」
「⋯⋯其實是在煩惱要不要教妳真正的程式。」

「咳咳咳⋯⋯我們之前寫的是假的嗎?!」一句話達到語不驚人死不休的效果,詩憶覺得學姐完美達成,她嗆到了。

「當然是真的呀。」唯心看著這樣的詩憶笑起來。「只是啊,程式語言一直在朝著降低開發者門檻的進化,且累績前人經驗的各種框架和函式庫也越來越多,需要理解演算法和資料結構才能寫的程式越來越少。當然,掌握這兩者的工程師能走得更遠,這是毋庸置疑地。」比如Google、Facebook、Microsoft和Amazon等需要大數據分析的公司,希望工程師能開發更好的演算法。

「比如說,猜數字幾A幾B這個遊戲,出題方需要先準備一個四位數,且數字之間不能重複。妳會怎麼做?」唯心考驗詩憶。

「嗯?我想想,用for迴圈跑四次,裡面的內容是產生0到9的數字,然後還要檢查有沒有和之前產生的重複?」詩憶邊思考邊說。

「是呀,檢查有沒有重複這件事,其實就是搜尋資料的功能。而資料結構和演算法在其中的角色分別是,前者決定資料在儲存記憶體的方式,後者估算佔據的記憶體容量和花費的時間。」

「聽起來很重要呢。」

「但是,妳知道嗎?Kotlin的基本函式庫有一個shuffled函式,功能就是打亂陣列內容。所以只要準備0到9的陣列,打亂之後取前面四個數字,就完成出題方的準備工作。」唯心把之前寫好的程式碼拿出來。「不過,這也是在陣列大小和索取的數量級相差不多的情形下才用的取巧方法。」

fun main() {
    println(random4in9())
}
fun random4in9() = (0..9).shuffled().take(4)

詩憶看著函式右邊沒有大括號包著,只有等號的寫法,說:「喔喔,我有在講義上看過這種函式寫法,叫做一行表達式Single-expression functions對吧?」

「對,之前我們用的都是敘述式Statement,新寫法可以不用註明回傳的類別。」

「我在講義上還看到變數也可以存函式。」詩憶把剛寫好的程式碼拿給唯心學姐看。

fun main() {
    println(random4in9)
}
val random4in9 = (0..9).shuffled().take(4)

「嗯⋯⋯是這樣沒錯,但是變數寫法只會在程式開始時呼叫一次函式,程式執行期間都直接延用過去的結果,妳試著執行一次就知道了。」唯心將兩個寫法各呼叫兩次。

fun main() {
    println(random4in9())
    println(random4in9())
    println(random4in9)
    println(random4in9)
}

列印出的結果是:

[6, 4, 2, 1]
[0, 6, 5, 2]
[4, 3, 5, 2]
[4, 3, 5, 2]

「嗯嗯,原來如此,關於學姐方才說的,是不是要學真正的程式這件事,先不論未來要去哪裡就業,演算法和資料結構都是系上必修,在畢業前拿到及格分數就好,所以還有很多時間呀。」詩憶笑著說道。

「說的也是呢,得先平安度過這次的期末考呢。」唯心對著詩憶眨了眨眼,輕輕地笑了。


上一篇
重複的專家:迴圈 repeat , for loop, while loop, do while loop
下一篇
尋找字串與她的小夥伴:正規式 String Regex Replace
系列文
溫柔學姐的Kotlin補課/教學31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言